/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;

import DAO.Personne;
import DAO.Utilisateur;
import EJB.UtilisateurEJBLocal;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author shafsia
 */
@ManagedBean(name="connexionBean")
@SessionScoped
public class UtilisateurJSFBean implements Serializable{

    /**
        * Creates a new instance of UtilisateurJSFBean
        */
    public UtilisateurJSFBean() {
    }

    @EJB
    private UtilisateurEJBLocal utilisateurEJB;

    /*
     * Utilisateur + Personne
     */
    private String login;
    private String pass;
    private String nom;
    private String prenom;
    private String dateDeNaissance;
    
    /*
     * Recherche
     */
    private String rechercheNom = null;
    private String recherchePrenom = null;
    private ArrayList<Personne> resultRecherche = null;
    
    /*
     * Amis
     */
    private List<Utilisateur> demandesRecues = new ArrayList<Utilisateur>();
    private List<Utilisateur> demandesEnvoyees = new ArrayList<Utilisateur>();

    /*
     * Login + Session
     */
    private String erreur = null;
    private String erreurInscription = null;
    private Utilisateur connectedUser = new Utilisateur();
    private String accessDenied = "Refresh";

    /*
     * Message
     */
    private String corpsMessage = null;
    
    
    

    public String getAccessDenied() {
        return accessDenied;
    }

    public void setAccessDenied(String accessDenied) {
        this.accessDenied = accessDenied;
    }

    public Utilisateur getConnectedUser() {
        return connectedUser;
    }

    public void setConnectedUser(Utilisateur connectedUser) {
        this.connectedUser = connectedUser;
    }

    public String getDateDeNaissance() {
        return dateDeNaissance;
    }

    public void setDateDeNaissance(String dateDeNaissance) {
        this.dateDeNaissance = dateDeNaissance;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getPrenom() {
        return prenom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public String getErreurInscription() {
            return erreurInscription;
    }

    public void setErreurInscription(String erreurInscription) {
            this.erreurInscription = erreurInscription;
    }

    public String getErreur() {
            return erreur;
    }

    public void setErreur(String erreur) {
            this.erreur = erreur;
    }

    public String getLogin() {
            return login;
    }

    public void setLogin(String login) {
            this.login = login;
    }

    public String getPass() {
            return pass;
    }

    public void setPass(String pass) {
            this.pass = pass;
    }

    public UtilisateurEJBLocal getUtilisateurEJB() {
            return utilisateurEJB;
    }

    public void setUtilisateurEJB(UtilisateurEJBLocal utilisateurEJB) {
            this.utilisateurEJB = utilisateurEJB;
    }

    public String getRechercheNom() {
        return rechercheNom;
    }

    public void setRechercheNom(String rechercheNom) {
        this.rechercheNom = rechercheNom;
    }

    public String getRecherchePrenom() {
        return recherchePrenom;
    }

    public void setRecherchePrenom(String recherchePrenom) {
        this.recherchePrenom = recherchePrenom;
    }

    public ArrayList<Personne> getResultRecherche() {
        return resultRecherche;
    }

    public void setResultRecherche(ArrayList<Personne> resultRecherche) {
        this.resultRecherche = resultRecherche;
    }
    
    public List<Utilisateur> getDemandesRecues()
    {
        //demandesRecues = utilisateurEJB.findByLogin(login).getDemandesRecues();
        //return demandesRecues;
        return null;
    }
    
    public String getNbDemandesRecues()
    {
        //return "Vous avez "+demandesRecues.size()+" demande(s) d'ami.";
        return null;
    }
    
    public List<Utilisateur> getDemandesEnvoyees()
    {
        //demandesEnvoyees = utilisateurEJB.findByLogin(login).getDemandesEnvoyees();
        //return demandesEnvoyees;
        return null;
    }

    public void setDemandesEnvoyees(ArrayList<Utilisateur> demandesEnvoyees) {
        this.demandesEnvoyees = demandesEnvoyees;
    }

    public void setDemandesRecues(ArrayList<Utilisateur> demandesRecues) {
        this.demandesRecues = demandesRecues;
    }

    public String getCorpsMessage() {
        return corpsMessage;
    }

    public void setCorpsMessage(String corpsMessage) {
        this.corpsMessage = corpsMessage;
    }
    
    public String getNbAmis()
    {
        return "vous avez "+utilisateurEJB.findByLogin(login).getAmis().size() +" amis.";
    }
    

    @Override
    public boolean equals(Object obj) {
            if (obj == null) {
                    return false;
            }
            if (getClass() != obj.getClass()) {
                    return false;
            }
            final UtilisateurJSFBean other = (UtilisateurJSFBean) obj;
            if ((this.login == null) ? (other.login != null) : !this.login.equals(other.login)) {
                    return false;
            }
            if ((this.pass == null) ? (other.pass != null) : !this.pass.equals(other.pass)) {
                    return false;
            }
            return true;
    }

    @Override
    public int hashCode() {
            int hash = 5;
            hash = 67 * hash + (this.login != null ? this.login.hashCode() : 0);
            hash = 67 * hash + (this.pass != null ? this.pass.hashCode() : 0);
            return hash;
    }

    public String connectForm(){
        erreurInscription = "";
        connectedUser = utilisateurEJB.findByLoginAndPass(login, pass);
        if(connectedUser==null){
                erreur = "Login ou Mot de passe incorrect.";
                return"failure";
        }
        erreur = "";
        accessDenied = "";
        return "success";
    }
    
    public String disconnectForm(){
        erreurInscription = "";
        erreur = "";
        connectedUser = null;
        accessDenied = "Refresh";
                
        nom = "";
        prenom = "";
        dateDeNaissance = "";
        login = "";
        pass = "";
        
        return "success";
    }
    
    public String subscribeForm(){
        erreur = "";
        if(utilisateurEJB.findByLogin(login)!=null){
                erreurInscription = "Login déjà existant.";
                return"failure";
        }
        Utilisateur nouveau = new Utilisateur(login, pass);
        Personne p = new Personne(nom, prenom, dateDeNaissance);
        nouveau.setMur(p);
        
        utilisateurEJB.save(nouveau);
        erreurInscription = "Utilisateur créé.";
        
        nom = "";
        prenom = "";
        dateDeNaissance = "";
        login = "";
        pass = "";
        
        return "success";
    }
    
    public String researchForm()
    {
        //resultRecherche = new ArrayList<Utilisateur>();
        
        List<Utilisateur> res = new ArrayList<Utilisateur>();
        //res = utilisateurEJB.findUtilisateurByNameAndFName(recherchePrenom, rechercheNom);
        
        //resultRecherche = (ArrayList<Utilisateur>)res;
        
        rechercheNom="";
        recherchePrenom="";
        
        return "success";
    }
    
    public String seeFriendly()
    {
        return "success";
    }
    /*
     * u : la personne que l'on veut ajouter
     */
    public String addFriend(Utilisateur u)
    {
        //System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAA");
        //System.out.println(u.toString());
        //utilisateurEJB.addEnvoiDemande(utilisateurEJB.findByLogin(login), utilisateurEJB.findByLogin(u.getLogin()));
        //utilisateurEJB.update(utilisateurEJB.findByLogin(login));
        Utilisateur a = utilisateurEJB.findByLogin(login);
        //utilisateurEJB.addAmi(a, utilisateurEJB.findByLogin(u.getLogin()));
        utilisateurEJB.update(a);
        return "success";
    }
    
    public String addMessageOnMyWall(){
        if(corpsMessage.equals(""))
        {
            return "failure";
        }
        return "success";
    }
}
